#include "Sound.h"


using namespace WONAPI;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
SoundDescriptor::SoundDescriptor()
{
	mSoundFlags = 0;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
SoundDescriptor::SoundDescriptor(const char *thePath) : mFilePath(thePath)
{
	mSoundFlags = 0;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
SoundDescriptor::SoundDescriptor(const std::string &thePath, int theFlags) : mFilePath(thePath)
{
	mSoundFlags = theFlags;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void SoundDescriptor::SetSoundFlags(int theFlags, bool on)
{
	if(on)
		mSoundFlags |= theFlags;
	else
		mSoundFlags &= ~theFlags;
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
Sound::Sound(const SoundDescriptor &theDesc) : mDescriptor(theDesc)
{
	mIsLooping = false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void Sound::Play()
{
	if(!GetMuted())
		PlayHook();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void Sound::Stop()
{
	StopHook();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void Sound::Resume()
{
	ResumeHook();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void Sound::Rewind()
{
	RewindHook();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void Sound::SetMuted(bool isMuted)
{
	if(isMuted==GetMuted())
		return;

	mDescriptor.SetSoundFlags(SoundFlag_Muted,isMuted);
	if(isMuted)
		Stop();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool Sound::GetMuted()
{
	return mDescriptor.SoundFlagSet(SoundFlag_Muted);
}
